// 箭头函数与普通函数的区别
// 箭头函数是普通函数的简写，可以更优雅的定义一个函数，和普通函数相比，有以下几点差异：

// 1、函数体内的 this 对象，就是定义时所在的对象，而不是使用时所在的对象。

// 2、不可以使用 arguments 对象，该对象在函数体内不存在。如果要用，可以用 rest 参数代替。

// 3、不可以使用 yield 命令，因此箭头函数不能用作 Generator 函数。

// 4、不可以使用 new 命令，因为：

// 没有自己的 this，无法调用 call，apply。
// 没有 prototype 属性 ，而 new 命令在执行时需要将构造函数的 prototype 赋值给新的对象的 __proto__

function myNew(fn, ...arg) {
    const res = Object.create(fn.prototype);//自己写的时候这一步会忘掉

    fn.call(res, ...arg);
    // __proto__ 原型链
    // prototype 原型对象（函数才有）箭头函数没有
    // res.__proto__ = fn.prototype;
    if(A())return A()//如果构造函数显式返回一个对象，则这个返回的对象会被作为 new 表达式的结果，
    // 并且新创建的对象（其原型原本应该被设置为构造函数的 prototype）会被丢弃

    return res;

}

const A = function (name, age) {
    this.name = name || 'dyx'
    this.age = age || 23
}

const djh = new A();


const newDjh = myNew(A, 'djh', '24');
console.log(newDjh.__proto__ === A.prototype)

console.log(djh);

console.log(newDjh);




